home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / visual1a / creadwri.cls next >
Text File  |  1999-08-04  |  21KB  |  839 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "cReadWriteEasyReg"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. '***************************************************************
  15. 'Windows API/Global Declarations for :cReadWriteEasyReg (Updated
  16. '     cReadEasyReg)
  17. '***************************************************************
  18. Option Explicit
  19. 'Registry API's to use
  20. Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
  21. Private Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, ByVal cbName As Long) As Long
  22. Private Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, cbName As Long, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long
  23. Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
  24. Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
  25. Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpKeyName As String) As Long
  26. Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
  27. Private Declare Function ExpandEnvironmentStrings Lib "advapi32.dll" (lpSrc As String, lpDst As String, ByVal nSize As Long) As Long
  28. Private Declare Function RegCreateKeyEx Lib "advapi32" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, phkResult As Long, lpdwDisposition As Long) As Long
  29. Private Declare Function RegSetValueEx Lib "advapi32" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long
  30.  
  31. Private Type SECURITY_ATTRIBUTES
  32.     nLength As Long
  33.     lpSecurityDescriptor As Variant
  34.     bInheritHandle As Long
  35. End Type
  36. 'Enum's for the OpenRegistry function
  37. Public Enum HKeys
  38.     HKEY_CLASSES_ROOT = &H80000000
  39.     HKEY_CURRENT_USER = &H80000001
  40.     HKEY_LOCAL_MACHINE = &H80000002
  41.     HKEY_USERS = &H80000003
  42.     HKEY_PERFORMANCE_DATA = &H80000004
  43.     HKEY_CURRENT_CONFIG = &H80000005
  44.     HKEY_DYN_DATA = &H80000006
  45. End Enum
  46. 'Enum's for the DataTypes
  47. Public Enum lDataType
  48.     REG_NONE = 0
  49.     REG_SZ = 1
  50.     REG_EXPAND_SZ = 2
  51.     REG_BINARY = 3
  52.     REG_DWORD = 4
  53.     REG_DWORD_LITTLE_ENDIAN = 4
  54.     REG_DWORD_BIG_ENDIAN = 5
  55.     REG_LINK = 6
  56.     REG_MULTI_SZ = 7
  57.     REG_RESOURCE_LIST = 8
  58.     REG_FULL_RESOURCE_DESCRIPTOR = 9
  59.     REG_RESOURCE_REQUIREMENTS_LIST = 10
  60. End Enum
  61.  
  62. 'Right's for the OpenRegistry
  63. Private Const STANDARD_RIGHTS_ALL = &H1F0000
  64. Private Const KEY_QUERY_VALUE = &H1
  65. Private Const KEY_SET_VALUE = &H2
  66. Private Const KEY_CREATE_SUB_KEY = &H4
  67. Private Const KEY_ENUMERATE_SUB_KEYS = &H8
  68. Private Const KEY_NOTIFY = &H10
  69. Private Const KEY_CREATE_LINK = &H20
  70. Private Const SYNCHRONIZE = &H100000
  71. Private Const KEY_READ = &H20009
  72. Private Const KEY_WRITE = &H20006
  73. Private Const KEY_READ_WRITE = ( _
  74. KEY_READ _
  75. And _
  76. KEY_WRITE _
  77. )
  78. Private Const KEY_ALL_ACCESS = (( _
  79. STANDARD_RIGHTS_ALL Or _
  80. KEY_QUERY_VALUE Or _
  81. KEY_SET_VALUE Or _
  82. KEY_CREATE_SUB_KEY Or _
  83. KEY_ENUMERATE_SUB_KEYS Or _
  84. KEY_NOTIFY Or _
  85. KEY_CREATE_LINK _
  86. ) And (Not SYNCHRONIZE))
  87.  
  88. Private Const REG_OPTION_NON_VOLATILE = 0&
  89. Private Const REG_OPTION_VOLATILE = &H1
  90.  
  91.  
  92. 'Local var's to keep track of things happening
  93. Dim RootHKey As HKeys
  94. Dim SubDir As String
  95. Dim hKey As Long
  96. Dim OpenRegOk As Boolean
  97. 'This function will return a array of variant with all the subkey
  98. '     values
  99. 'eg.
  100. ' Dim MyVariant As Variant, MyReg As New CReadWriteEasyReg, i As
  101. '     Integer
  102. ' If Not MyReg.OpenRegistry(HKEY_LOCAL_MACHINE, "Software\Microso
  103. '     ft") Then
  104. 'MsgBox "Couldn't open the registry"
  105. 'Exit Sub
  106. ' End If
  107. ' MyVariant = MyReg.GetAllSubDirectories
  108. ' For i = LBound(MyVariant) To UBound(MyVariant)
  109. 'Debug.Print MyVariant(i)
  110. ' Next i
  111. ' MyReg.CloseRegistry
  112.  
  113.  
  114. Function GetAllSubDirectories() As Variant
  115.  
  116.  
  117.     On Error GoTo handelgetdirvalues
  118.     Dim SubKey_Num As Integer
  119.     Dim SubKey_Name As String
  120.     Dim length As Long
  121.     Dim ReturnArray() As Variant
  122.     
  123.     If Not OpenRegOk Then Exit Function
  124.     'Get the Dir List
  125.  
  126.  
  127. SubKey_Num = 0
  128.  
  129.  
  130.  
  131.     Do
  132.         length = 256
  133.  
  134.  
  135. SubKey_Name = Space$(length)
  136.  
  137.  
  138.  
  139.     If RegEnumKey(hKey, SubKey_Num, SubKey_Name, length) <> 0 Then
  140.         Exit Do
  141.     End If
  142.  
  143.  
  144.  
  145. SubKey_Name = Left$(SubKey_Name, InStr(SubKey_Name, Chr$(0)) - 1)
  146.  
  147.     ReDim Preserve ReturnArray(SubKey_Num) As Variant
  148.     ReturnArray(SubKey_Num) = SubKey_Name
  149.  
  150.  
  151. SubKey_Num = SubKey_Num + 1
  152.  
  153. Loop
  154.  
  155. GetAllSubDirectories = ReturnArray
  156. Exit Function
  157. handelgetdirvalues:
  158. GetAllSubDirectories = Null
  159. Exit Function
  160. End Function
  161.  
  162. 'This function will return a true or false when it creates a key
  163.  
  164.  
  165. '     for you
  166. 'eg.
  167. ' Dim MyReg As New CReadWriteEasyReg
  168. ' If Not MyReg.OpenRegistry(HKEY_LOCAL_MACHINE, "Software\Microso
  169. '     ft") Then
  170. 'MsgBox "Couldn't open the registry"
  171. 'Exit Sub
  172. ' End If
  173. ' if MyReg.CreateDirectory("TestDir") then
  174. 'Msgbox "Key created"
  175. ' else
  176. 'msgbox "Couldn't Create key"
  177. ' end if
  178. ' MyReg.CloseRegistry
  179.  
  180.  
  181. Public Function CreateDirectory(ByVal sNewDirName As String) As Boolean
  182.  
  183.     Dim hNewKey As Long, lpdwDisposition As Long
  184.     Dim lpSecurityAttributes As SECURITY_ATTRIBUTES
  185.     Dim lReturn As Long
  186.     
  187.     If Not OpenRegOk Then Exit Function
  188.     
  189.     lReturn = RegCreateKeyEx(hKey, sNewDirName, 0&, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, lpSecurityAttributes, hNewKey, lpdwDisposition)
  190.  
  191.  
  192.     If lReturn = 0 Then
  193.         CreateDirectory = True
  194.     Else
  195.         CreateDirectory = False
  196.     End If
  197.  
  198. End Function
  199.  
  200. 'This function will return a true or false when it deletes a key
  201.  
  202.  
  203. '     for you
  204.     'eg.
  205.     ' Dim MyReg As New CReadWriteEasyReg
  206.     ' If Not MyReg.OpenRegistry(HKEY_LOCAL_MACHINE, "Software\Microso
  207.     '     ft") Then
  208.     'MsgBox "Couldn't open the registry"
  209.     'Exit Sub
  210.     ' End If
  211.     ' if MyReg.DeleteDirectory("MyTestDir") then
  212.     'Msgbox "Key Deleted"
  213.     ' else
  214.     'msgbox "Couldn't Delete key"
  215.     ' end if
  216.     ' MyReg.CloseRegistry
  217.  
  218.  
  219. Public Function DeleteDirectory(ByVal sKeyName As String) As Boolean
  220.  
  221.     Dim lReturn As Long
  222.     
  223.     If Not OpenRegOk Then Exit Function
  224.     
  225.     lReturn = RegDeleteKey(hKey, sKeyName)
  226.  
  227.  
  228.     If lReturn = 0 Then
  229.         DeleteDirectory = True
  230.     Else
  231.         DeleteDirectory = False
  232.     End If
  233.  
  234. End Function
  235.  
  236. 'This function will return a array of variant with all the value
  237. '     names in a key
  238. 'eg.
  239. ' Dim MyVariant As Variant, MyReg As New CReadWriteEasyReg, i As
  240. '     Integer
  241. ' If Not MyReg.OpenRegistry(HKEY_LOCAL_MACHINE, "HardWare\Descrip
  242. '     tion\System\CentralProcessor\0") Then
  243. 'MsgBox "Couldn't open the registry"
  244. 'Exit Sub
  245. ' End If
  246. ' MyVariant = MyReg.GetAllValues
  247. ' For i = LBound(MyVariant) To UBound(MyVariant)
  248. 'Debug.Print MyVariant(i)
  249. ' Next i
  250. ' MyReg.CloseRegistry
  251.  
  252.  
  253. Function GetAllValues() As Variant
  254.  
  255.     On Error GoTo handelgetdirvalues
  256.     Dim lpData As String, KeyType As Long
  257.     Dim BufferLengh As Long, vname As String, vnamel As Long
  258.     Dim ReturnArray() As Variant, Index As Integer
  259.     
  260.     If Not OpenRegOk Then Exit Function
  261.     
  262.     'Get the Values List
  263.     Index = 0
  264.  
  265.  
  266.     Do
  267.         lpData = String(250, " ")